#pragma once

#include "timer.h"


#include "AbandonObjectDetect.h"




// 该类设计为：一段时间内只执行一次函数
class CallOnce {
public:
  CallOnce(float fSecond, CallBack cb) {
    this->fSecond = fSecond;
    this->cb = cb;
  };

  void publish(MsgAOD type) {
    if (!flag) {
      flag = true;
      cb(type);
      t.reset();
    } else if (t.elapsed_seconds() >= fSecond) {
      cb(type);
      t.reset();
    }
  }

private:
  Timer t;

  // 标志第一次执行
  bool flag = false;

  float fSecond;

  // 回调函数
  CallBack cb;
};

typedef shared_ptr<CallOnce> CallOncePtr;